home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / amipop17.zip / POP.C < prev    next >
C/C++ Source or Header  |  1993-11-15  |  11KB  |  429 lines

  1. #include "pop.h"
  2.  
  3. struct Screen         *Scr = NULL;
  4. APTR                   VisualInfo = NULL;
  5. struct Window         *Project0Wnd = NULL;
  6. struct Gadget         *Project0GList = NULL;
  7. struct Menu           *Project0Menus = NULL;
  8. struct IntuiMessage    Project0Msg;
  9. struct Gadget         *Project0Gadgets[9];
  10. UWORD                  Project0Left = 119;
  11. UWORD                  Project0Top = 147;
  12. UWORD                  Project0Width = 418;
  13. UWORD                  Project0Height = 69;
  14. UBYTE                 *Project0Wdt = (UBYTE *)"AmiPOP Client";
  15. struct TextAttr       *Font, Attr;
  16. UWORD                  FontX, FontY;
  17. UWORD                  OffX, OffY;
  18.  
  19. ULONG __saveds __asm hidepass( register __a0 struct Hook*, register __a2 struct SGWork* ,register __a1 ULONG* );
  20.  
  21. struct Hook hookentry =
  22. {
  23.     {0},
  24.     hidepass,
  25.     0,
  26.     0,
  27. };
  28.  
  29. struct NewMenu Project0NewMenu[] = {
  30.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  31.     NM_ITEM, (STRPTR)"Hide", (STRPTR)"H", 0, 0L, (APTR)Project0MENU_HIDE,
  32.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  33.     NM_ITEM, (STRPTR)"About...", NULL, 0, 0L, (APTR)Project0MENU_ABOUT,
  34.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)Project0MENU_QUIT,
  35.     NM_END, NULL, NULL, 0, 0L, NULL };
  36.  
  37. static UWORD ComputeX( UWORD value )
  38. {
  39.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  40. }
  41.  
  42. static UWORD ComputeY( UWORD value )
  43. {
  44.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  45. }
  46.  
  47. static void ComputeFont( UWORD width, UWORD height )
  48. {
  49.     Font = &Attr;
  50.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  51.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  52.     FontX = Scr->RastPort.Font->tf_XSize;
  53.  
  54.     OffX = Scr->WBorLeft;
  55.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  56.  
  57.     if ( width && height ) {
  58.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  59.             goto UseTopaz;
  60.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  61.             goto UseTopaz;
  62.     }
  63.     return;
  64.  
  65. UseTopaz:
  66.     Font->ta_Name = (STRPTR)"topaz.font";
  67.     FontX = FontY = Font->ta_YSize = 8;
  68. }
  69.  
  70. int SetupScreen( void )
  71. {
  72.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  73.     {
  74.         if ( ! (Scr = LockPubScreen( NULL )))
  75.         {
  76.             return( 1L );
  77.         }
  78.     }
  79.  
  80.     ComputeFont( 0, 0 );
  81.  
  82.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  83.         return( 2L );
  84.  
  85.     return( 0L );
  86. }
  87.  
  88. void CloseDownScreen( void )
  89. {
  90.     if ( VisualInfo ) {
  91.         FreeVisualInfo( VisualInfo );
  92.         VisualInfo = NULL;
  93.     }
  94.  
  95.     if ( Scr        ) {
  96.         UnlockPubScreen( NULL, Scr );
  97.         Scr = NULL;
  98.     }
  99. }
  100.  
  101. void Project0Render( void )
  102. {
  103.     ComputeFont( Project0Width, Project0Height );
  104.  
  105.     DrawBevelBox( Project0Wnd->RPort, OffX + ComputeX( 0 ),
  106.                     OffY + ComputeY( 50 ),
  107.                     ComputeX( 417 ),
  108.                     ComputeY( 18 ),
  109.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  110. }
  111.  
  112. int HandleProject0IDCMP( void )
  113. {
  114.     struct IntuiMessage    *m;
  115.     struct MenuItem        *n;
  116.     int            (*func)( void );
  117.     BOOL            running = TRUE;
  118.  
  119.     while( (Project0Wnd) && (m = GT_GetIMsg( Project0Wnd->UserPort ) ) ) {
  120.  
  121.         CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));
  122.  
  123.         GT_ReplyIMsg( m );
  124.  
  125.         switch ( Project0Msg.Class ) {
  126.  
  127.             case    IDCMP_REFRESHWINDOW:
  128.                 GT_BeginRefresh( Project0Wnd );
  129.                 Project0Render();
  130.                 GT_EndRefresh( Project0Wnd, TRUE );
  131.                 break;
  132.  
  133.             case    IDCMP_CLOSEWINDOW:
  134.                 running = Project0CloseWindow();
  135.                 break;
  136.  
  137.             case    IDCMP_VANILLAKEY:
  138.                 Project0VanillaKey();
  139.                 break;
  140.  
  141.             case    IDCMP_CHANGEWINDOW:
  142.                 Project0ChangeWindow();
  143.                 break;
  144.  
  145.             case    IDCMP_GADGETUP:
  146.                 func = ( int (*) (void ) )(( struct Gadget * )Project0Msg.IAddress )->UserData;
  147.                 func();
  148.                 break;
  149.  
  150.             case    IDCMP_MENUPICK:
  151.                 while ( (Project0Msg.Code != MENUNULL) && (Project0Wnd) )
  152.                 {
  153.                     n = ItemAddress( Project0Menus, Project0Msg.Code );
  154.                     func = (int (*) (void) )(GTMENUITEM_USERDATA(n));
  155.                     running= func();
  156.                     Project0Msg.Code = n->NextSelect;
  157.                 }
  158.                 break;
  159.         }
  160.     }
  161.     return( running );
  162. }
  163.  
  164. int OpenProject0Window( void )
  165. {
  166.     struct NewGadget    ng;
  167.     struct Gadget    *g;
  168.     UWORD        wleft = Project0Left, wtop = Project0Top, ww, wh;
  169.  
  170.     WORD zipsize[]={0,0,200,90};
  171.  
  172.     hookentry.h_SubEntry = (ULONG (*)() )password; /* Attempt to get hook working again */
  173.     memset(passfake,PASSCHAR,strlen(password)); /* Show initial string gadget condition */
  174.     passfake[strlen(password)]='\0';
  175.  
  176.     ComputeFont( Project0Width, Project0Height );
  177.  
  178.     ww = ComputeX( Project0Width );
  179.     wh = ComputeY( Project0Height );
  180.  
  181.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  182.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  183.  
  184.     zipsize[2]=(WORD)(ww + Scr->WBorRight);
  185.     zipsize[3]=(WORD)(Scr->WBorTop + (Scr->Font->ta_YSize +1));
  186.  
  187.     if ( ! ( g = CreateContext( &Project0GList )))
  188.         return( 1L );
  189.  
  190. /* */
  191.  
  192.     ng.ng_VisualInfo = VisualInfo;
  193.     ng.ng_TextAttr   = Font;
  194.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  195.     ng.ng_TopEdge    = OffY + ComputeY( 17 );
  196.     ng.ng_Width        = ComputeX( 114 );
  197.     ng.ng_Height    = ComputeY( 12 );
  198.     ng.ng_GadgetID    = GD_MYGAD_USER;
  199.     ng.ng_GadgetText= "_Username";
  200.     ng.ng_Flags        = PLACETEXT_LEFT;
  201.     ng.ng_UserData    = (APTR)MYGAD_USERClicked;
  202.  
  203.     Project0Gadgets[GD_MYGAD_USER]=g=    CreateGadget(STRING_KIND,g,&ng,
  204.                                         GTST_String,    username,
  205.                                         GTST_MaxChars,    SMALLSTRING-1,
  206.                                         GT_Underscore,    '_',
  207.                                         TAG_DONE);
  208. /* */
  209.  
  210.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  211.     ng.ng_TopEdge    = OffY + ComputeY( 32 );
  212.     ng.ng_Width        = ComputeX( 114 );
  213.     ng.ng_Height    = ComputeY( 12 );
  214.     ng.ng_GadgetID    = GD_MYGAD_PASSWORD;
  215.     ng.ng_GadgetText= "Pass_word";
  216.     ng.ng_Flags        = PLACETEXT_LEFT;
  217.     ng.ng_UserData    = (APTR)MYGAD_PASSWORDClicked;
  218.  
  219.     Project0Gadgets[GD_MYGAD_PASSWORD]=g=    CreateGadget(STRING_KIND,g,&ng,
  220.                                         GTST_String,    passfake,
  221.                                         GTST_EditHook,    &hookentry,
  222.                                         GTST_MaxChars,    SMALLSTRING-1,
  223.                                         GT_Underscore,    '_',
  224.                                         TAG_DONE);
  225.  
  226. /* */
  227.  
  228.     ng.ng_LeftEdge    = OffX + ComputeX( 414 ) - 25;
  229.     ng.ng_TopEdge    = OffY + ComputeY( 32 );
  230.     ng.ng_Width        = ComputeX( 26 );
  231.     ng.ng_Height    = ComputeY( 11 );
  232.     ng.ng_GadgetID    = GD_MYGAD_DELETE;
  233.     ng.ng_GadgetText= "_Delete Messages?";
  234.     ng.ng_Flags        = PLACETEXT_LEFT;
  235.     ng.ng_UserData    = (APTR)MYGAD_DELETEClicked;
  236.  
  237.     Project0Gadgets[GD_MYGAD_DELETE]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  238.                                         GTCB_Checked,    delmail,
  239.                                         GT_Underscore,    '_',
  240.                                         TAG_END);
  241.  
  242. /* */
  243.  
  244.     ng.ng_LeftEdge    = OffX + ComputeX( 300 );
  245.     ng.ng_TopEdge    = OffY + ComputeY( 2 );
  246.     ng.ng_Width        = ComputeX( 114 );
  247.     ng.ng_Height    = ComputeY( 12 );
  248.     ng.ng_GadgetID    = GD_MYGAD_MAILDIR;
  249.     ng.ng_GadgetText= "Mail _Box";
  250.     ng.ng_Flags        = PLACETEXT_LEFT;
  251.     ng.ng_UserData    = (APTR)MYGAD_MAILDIRClicked;
  252.  
  253.     Project0Gadgets[GD_MYGAD_MAILDIR]=g=    CreateGadget(STRING_KIND,g,&ng,
  254.                                         GTST_String,    maildir,
  255.                                         GTST_MaxChars,    BIGSTRING-1,
  256.                                         GT_Underscore,    '_',
  257.                                         TAG_DONE);
  258.  
  259. /* */
  260.  
  261.     ng.ng_LeftEdge    = OffX + ComputeX( 329 );
  262.     ng.ng_TopEdge    = OffY + ComputeY( 53 );
  263.     ng.ng_Width        = ComputeX( 83 );
  264.     ng.ng_Height    = ComputeY( 11 );
  265.     ng.ng_GadgetID    = GD_MYGAD_BUTTON;
  266.     ng.ng_GadgetText= "Check _Now";
  267.     ng.ng_Flags        = PLACETEXT_IN;
  268.     ng.ng_UserData    = (APTR)MYGAD_BUTTONClicked;
  269.  
  270.     Project0Gadgets[GD_MYGAD_BUTTON]=g=    CreateGadget(BUTTON_KIND,g,&ng,
  271.                                         GT_Underscore,    '_',
  272.                                         TAG_DONE);
  273.  
  274. /* */
  275.  
  276.     ng.ng_LeftEdge    = OffX + ComputeX( 85 );
  277.     ng.ng_TopEdge    = OffY + ComputeY( 2 );
  278.     ng.ng_Width        = ComputeX( 114 );
  279.     ng.ng_Height    = ComputeY( 12 );
  280.     ng.ng_GadgetID    = GD_MYGAD_HOST;
  281.     ng.ng_GadgetText= "_POP Host";
  282.     ng.ng_Flags        = PLACETEXT_LEFT;
  283.     ng.ng_UserData    = (APTR)MYGAD_HOSTClicked;
  284.  
  285.     Project0Gadgets[GD_MYGAD_HOST]=g=    CreateGadget(STRING_KIND,g,&ng,
  286.                                         GTST_String,    pophost,
  287.                                         GTST_MaxChars,    BIGSTRING-1,
  288.                                         GT_Underscore,    '_',
  289.                                         TAG_DONE);
  290.  
  291. /* */
  292.  
  293.     ng.ng_LeftEdge    = OffX + ComputeX( 202 );
  294.     ng.ng_TopEdge    = OffY + ComputeY( 53 );
  295.     ng.ng_Width        = ComputeX( 39 );
  296.     ng.ng_Height    = ComputeY( 12 );
  297.     ng.ng_GadgetID    = GD_MYGAD_TIME;
  298.     ng.ng_GadgetText= "How _Often";
  299.     ng.ng_Flags        = PLACETEXT_RIGHT;
  300.     ng.ng_UserData    = (APTR)MYGAD_TIMEClicked;
  301.  
  302.     Project0Gadgets[GD_MYGAD_TIME]=g=    CreateGadget(INTEGER_KIND,g,&ng,
  303.                                         GTIN_Number,    timecheck,
  304.                                         GTIN_MaxChars,    3,
  305.                                         GT_Underscore,    '_',
  306.                                         GA_Disabled,    !checkper,
  307.                                         TAG_DONE);
  308.  
  309. /* */
  310.  
  311.     ng.ng_LeftEdge    = OffX + ComputeX( 11 );
  312.     ng.ng_TopEdge    = OffY + ComputeY( 54 );
  313.     ng.ng_Width        = ComputeX( 26 );
  314.     ng.ng_Height    = ComputeY( 11 );
  315.     ng.ng_GadgetID    = GD_MYGAD_CRONCHECK;
  316.     ng.ng_GadgetText= "_Check Periodically";
  317.     ng.ng_Flags        = PLACETEXT_RIGHT;
  318.     ng.ng_UserData    = (APTR)MYGAD_CRONCHECKClicked;
  319.  
  320.     Project0Gadgets[GD_MYGAD_CRONCHECK]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  321.                                         GTCB_Checked,    checkper,
  322.                                         GT_Underscore,    '_',
  323.                                         TAG_DONE);
  324.  
  325. /* */
  326.  
  327.     ng.ng_LeftEdge    =  OffX + ComputeX( 414 ) - 25;
  328.     ng.ng_TopEdge    = OffY + ComputeY( 17 );
  329.     ng.ng_Width        = ComputeX( 26 );
  330.     ng.ng_Height    = ComputeY( 11 );
  331.     ng.ng_GadgetID    = GD_MYGAD_APPEND;
  332.     ng.ng_GadgetText= "_Append to MailBox?";
  333.     ng.ng_Flags        = PLACETEXT_LEFT;
  334.     ng.ng_UserData    = (APTR)MYGAD_APPENDClicked;
  335.  
  336.     Project0Gadgets[GD_MYGAD_APPEND]=g=    CreateGadget(CHECKBOX_KIND,g,&ng,
  337.                                         GT_Underscore,    '_',
  338.                                         GTCB_Checked,    appfile,
  339.                                         TAG_DONE);
  340.  
  341.     if ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, GTMN_NewLookMenus, TRUE, TAG_DONE )))
  342.         return( 3L );
  343.  
  344.     LayoutMenus( Project0Menus, VisualInfo, TAG_DONE );
  345.  
  346.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  347.                 WA_Left,    wleft,
  348.                 WA_Top,        wtop,
  349.                 WA_Width,    ww + OffX + Scr->WBorRight,
  350.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  351.                 WA_IDCMP,    STRINGIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|INTEGERIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
  352.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  353.                 WA_Gadgets,    Project0GList,
  354.                 WA_Title,    Project0Wdt,
  355.                 WA_PubScreen,    Scr,
  356.                 WA_AutoAdjust,    TRUE,
  357.                 WA_NewLookMenus,TRUE,
  358.                 WA_Activate,    TRUE,
  359.                 WA_Zoom,    zipsize,
  360.                 TAG_DONE )))
  361.     return( 4L );
  362.  
  363.     SetMenuStrip( Project0Wnd, Project0Menus );
  364.     GT_RefreshWindow( Project0Wnd, NULL );
  365.  
  366.     Project0Render();
  367.  
  368.     return( 0L );
  369. }
  370.  
  371. void CloseProject0Window( void )
  372. {
  373.     if ( Project0Menus      ) {
  374.         ClearMenuStrip( Project0Wnd );
  375.         FreeMenus( Project0Menus );
  376.         Project0Menus = NULL;    }
  377.  
  378.     if ( Project0Wnd        ) {
  379.         CloseWindow( Project0Wnd );
  380.         Project0Wnd = NULL;
  381.     }
  382.  
  383.     if ( Project0GList      ) {
  384.         FreeGadgets( Project0GList );
  385.         Project0GList = NULL;
  386.     }
  387. }
  388.  
  389. /* Hook goodies */
  390.  
  391. ULONG __saveds __asm hidepass(register __a0 struct Hook *hook, register __a2 struct SGWork *sgw, register __a1 ULONG *msg)
  392. {
  393.     UBYTE *pass_ptr;
  394.  
  395.     pass_ptr = (STRPTR)hook->h_SubEntry;
  396.  
  397.     sgw->BufferPos = sgw->NumChars;
  398.  
  399.     if(*msg == SGH_KEY)
  400.     {
  401.         switch (sgw->EditOp)
  402.         {
  403.             case EO_INSERTCHAR:
  404.                 pass_ptr[sgw->BufferPos - 1] = sgw->WorkBuffer[sgw->BufferPos - 1];
  405.                 pass_ptr[sgw->BufferPos] = '\0';
  406.                 sgw->WorkBuffer[sgw->BufferPos - 1] = (UBYTE)PASSCHAR;
  407.                 break;
  408.  
  409.             case EO_DELBACKWARD:
  410.                 pass_ptr[sgw->BufferPos] = '\0';
  411.                 break;
  412.  
  413.             default:
  414.                 sgw->Actions &= ~SGA_USE;
  415.                 break;
  416.         }
  417.  
  418.         return (~0L);
  419.     }
  420.     if(*msg == SGH_CLICK)
  421.     {
  422.         sgw->BufferPos = sgw->NumChars;
  423.         return (~0L);
  424.     }
  425.  
  426.     return (0L);
  427. }
  428.  
  429.